引言
今天講的東西會稍微多一點,
我們直接開始吧~
General Skills / Based
題目首先提到 1337
,這個數字是什麼意思呢?
大家可以先參考維基百科: Leet
其實 1337
本身就是 Leet 這個字的 Leet 寫法,
聽起來很拗口,我稍微說明一下,
Leet 簡單來說就是駭客語,
會將英文字母換成其他外形或發音相像的數字或符號,
藉此有一點混淆視覺的效果,且感覺更有駭客風格。
幾個 Leet 例子:
當然寫法有很多種,沒有一定的規範,
但會有比較慣用的換法。
這有點像中文的拆字流行文化:
回到題目,題目要求先 nc 到一個伺服器去:
$ nc jupiter.challenges.picoctf.org 29221
跑出一些訊息:
( 題目每次都會變,所以請你遵照自己跑出來的結果為主。 )
Let us see how data is stored
sludge
Please give the 01110011 01101100 01110101 01100100 01100111 01100101 as a word.
...
you have 45 seconds.....
Input:
可以看出程式要求將一串二進位數字轉成許多字母並串起來,而且有限時。
再者,這題會有許多小題要答,這題二進位答對後還會出現其他題。
這邊有三種解法:
如果要寫 Python 解題,用的還是「題目出現後再貼上程式轉換」的方法的話,勢必需開兩個以上的 shell , webshell 沒辦法這樣做。
因此可以簡單使用網路上轉換工具,可以簡單無腦複製貼上解題,但必須先判斷題目目前是什麼進位制,再用相應進位制轉換器轉換。
不是用 webshell 的話,可以用簡單 Python 程式解題,分別寫出每題對應的轉換程式,然後開另一個視窗來用該程式轉換,原視窗則跑題目伺服器。
使用 pwntools
。這是最進階的方法,需額外套件,
但此套件使用率將會非常高,在更進階的題目中再集中講解,
這邊暫不介紹。
開始解題:
網頁轉換
這裡就不贅述了,可自行搜尋 binary to string
、 octal to string
、 hex to string
等關鍵字,網路上有許多轉換器。
簡單 Python 程式
這個方法需要至少開兩個 shell ,其中一個跑 nc ,另一個寫程式轉換。這邊只敘述寫轉換程式的部份:
l = input().split() # 讀取字串並用空格切割
for b in l:
print(chr(int(b, base=2)), end='')
# base 2 to base 10 ,轉成字元,並且字元間不換行
print() # 最後換行
l = input().split()
for b in l:
print(chr(int(b, base=8)), end='')
print()
s = input()
l = []
for i in range(len(s)//2): # 兩兩切一塊
l.append(s[i*2:i*2+2]) # 放到 l 中
for b in l:
print(chr(int(b, base=16)), end='')
print()
寫好程式後儲存成 .py 檔,在另一個 shell 執行它,
再來就是 nc 過程。
在原本的 shell 執行 nc 命令:
$ nc jupiter.challenges.picoctf.org 29221
下面是其中一次我執行的結果:
Let us see how data is stored
falcon
Please give the 01100110 01100001 01101100 01100011 01101111 01101110 as a word.
...
you have 45 seconds.....
Input:
01100110 01100001 01101100 01100011 01101111 01101110
經轉換後得到 falcon
你會發現上面第二行就直接給你答案 falcon 了,算是第一題讓你試水溫用。
第二題:
Please give me the 143 150 141 151 162 as a word.
Input:
143 150 141 151 162
經轉換後得到 chair
第三題:
Please give me the 6c696d65 as a word.
Input:
6c696d65
經轉換後得到 lime
最後拿到 flag :
You've beaten the challenge
Flag: picoCTF{learning_about_converting_values_00a975ff}
感謝您的分享,最近幾天跟著系列文玩CTF覺得很有意思
這邊提供一個小建議,雖然 webshell 不能開兩個 shell,但可以切換 process